package 递归;

/**
 * @PackageName: 递归
 * @ClassName: LeetCode606
 * @Author: chen jinxu
 * @Date: 2022/3/20 9:41
 * 你需要采用前序遍历的方式，将一个二叉树转换成一个由括号和整数组成的字符串。
 * 空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
 * 输入: 二叉树: [1,2,3,4]
 * 输出: "1(2(4))(3)"
 * 输入: 二叉树: [1,2,3,null,4]
 * 输出: "1(2()(4))(3)"
 */
public class LeetCode606 {
    public static void main(String[] args) {

    }

    public static String tree2str(TreeNode root) {
        if (root == null) {
            return "";
        }
        if (root.left == null && root.right == null) {
            return Integer.toString(root.val);
        }
        if (root.right == null) {
            return new StringBuilder().append(root.val).append("(").append(tree2str(root.left)).append(")").toString();
        }
            return new StringBuilder().append(root.val).append("(").append(tree2str(root.left))
                    .append(")(").append(tree2str(root.right)).append(")").toString();
    }

    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode() {
        }

        TreeNode(int val) {
            this.val = val;
        }

        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }

}
